home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / cmln0885.arc / CROSS1.LTG < prev    next >
Text File  |  1986-02-27  |  3KB  |  86 lines

  1. crossthoughts Listinτ 1«  
  2.              
  3. PP╠ routine≤ t∩ recal∞ anΣ storσ element≤ oµ ß one-dimensiona∞ ì
  4. virtua∞ array
  5.  
  6. -- Constant≤ are:
  7.  
  8. -- Table_Sizσ            Maximuφ numbe≥ oµ page≤ iε RAM.
  9. -- Page_Sizσ             Numbe≥ oµ arra∙ elemen⌠s iε ß page.
  10. -- Array_base_Addres≤    Lowe≥ arra∙ limi⌠ iε ß page.
  11. -- VM_base_addres≤       Startinτ V═ address
  12.  
  13. -- Externa∞ identifier≤ are:
  14.  
  15. -- Table_Typσ ╜ RECOR─ RAM_Page¼ Dirty_bi⌠ ║ integer╗ EN─ 
  16. -- Tablσ ║ ARRAY[1..Table_Size▌ oµ Table_Type
  17. -- SOUGHT_PAG┼ ║ integer
  18. -- RAM_Datß ║ ARRAY[1..PageSize▌ oµ An∙ type
  19.  
  20. -- File VM_File is assumed already opened
  21.  
  22. FUNCTION LOC(VM_Index : integer) return integer
  23.  
  24. BEGIN
  25.     SOUGHT_PAGE = VM_Index div Page_Size
  26.     -- Loop to search for page among RAM resident pages.
  27.     INITIALIZE: Found = FALSE 
  28.     LOOP <Table_Lookup>
  29.     BEGIN For i = 1 TO Table_Size
  30.         IF SOUGHT_PAGE = Table[i].RAM_Page
  31.         THEN Found = True
  32.              EXIT <Table_Lookup>
  33.         END IF
  34.     END LOOP <Table_Lookup>
  35.     TERMINATE: None
  36.  
  37.     IF NOT Found
  38.     THEN
  39.         Page_Swapped = Selected_Page() -- Function to select RAM resident
  40.                                           Page for swapping
  41.         IF Table[Page_Swapped].Dirty_bit THEN SAVE(Page_Swapped) END IF
  42.         LOAD(SOUGHT_PAGE,Page_Swapped)
  43.         Table[Page_Swapped].RAM_Page = SOUGHT_PAGE
  44.         Table[Page_Swapped].Dirty_bit = 0
  45.         SOUGHT_PAGE = Page_Swapped
  46.     ELSE
  47.         Page_Swapped = Selected_Page() -- Dummy call used to update
  48.                                        -- page replacement history
  49.         SOUGHT_PAGE = i
  50.     END IF
  51.     return (SOUGHT_PAGE * Page_Size + VM_Index mod Page_Size 
  52.              + Array_base_address)
  53.  
  54. END LOC
  55. è
  56. PROCEDURE VM_Assign(VM_Index : integer; X : Your_data)
  57.  
  58. BEGIN
  59.     RAM_Data[LOC(VM_Index)] = X
  60.     Table[SOUGHT_PAGE].Dirty_bit = 1
  61. END VM_Assign
  62.  
  63.  
  64. PROCEDURE SAVE(Page_Number : integer)
  65.  
  66. BEGIN
  67.  INITIALIZE: m = Page_Number - 1) * Page_Size + Array_base_address
  68.              p = (Table[Page_Number].RAM_Page - 1) * PageSize +
  69.                  VM_base_address
  70.      LOOP
  71.      BEGIN  For n = 1 to Page_Size
  72.           WRITE VM_File, (p + n),RAM_Data[m + n]
  73.      END LOOP
  74. END SAVE
  75. PROCEDURE LOAD(VM_Page, RAM_Page_Num : integer)
  76.  
  77. BEGIN
  78.  INITIALIZE: m = RAM_Page_Num - 1) * Page_Size + Array_base_address
  79.              p = (VM_Page - 1) * PageSize  + VM_base_address
  80.      LOOP
  81.      BEGIN  For n = 1 to Page_Size
  82.           READ VM_File, (p + n),RAM_Data[m + n]
  83.      END LOOP
  84. END SAVE
  85.  
  86.